From b6eb85ee72c228fd5f9657dce7ac7d352be57ad3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 26 Aug 2020 07:26:01 -0400 Subject: [PATCH] main: Avoid a crash with crossing event handling We are reusing the GtkCrossingData struct for multiple calls here, so we need to make sure that the targets stay alive from beginning to end. Fixes: #3090 --- gtk/gtkmain.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index a517a0e6e7..23c61cd270 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1335,9 +1335,9 @@ gtk_synthesize_crossing_events (GtkRoot *toplevel, crossing.type = crossing_type; crossing.mode = mode; - crossing.old_target = old_target; + crossing.old_target = old_target ? g_object_ref (old_target) : NULL; crossing.old_descendent = NULL; - crossing.new_target = new_target; + crossing.new_target = new_target ? g_object_ref (new_target) : NULL; crossing.new_descendent = NULL; crossing.drop = drop; @@ -1417,6 +1417,9 @@ gtk_synthesize_crossing_events (GtkRoot *toplevel, gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_PRELIGHT, FALSE); } + g_clear_object (&crossing.old_target); + g_clear_object (&crossing.new_target); + gtk_widget_stack_clear (&target_array); } -- 2.30.2